import axios from 'axios'
import { getCookie } from '@/utils/cookie'
import { Toast } from 'antd-mobile'

export function request (config: any) {
  const instance = axios.create({
    baseURL: 'https://api.shop.eduwork.cn/',
    timeout: 5000 // 5s没有请求到数据, 就提示请求失败
  })

  // 要使用全局的 必须讲index.ts 改为 index.tsx 这样才能引入其他组件作为显示内容 

  // 当前正在请求的数量
  // let requestCount = 0

  // 显示loading
  // function showLoading () {
  //   if (requestCount === 0) {
  //     Toast.show({ icon: 'loading', content: '加载中...', maskClickable: false, duration: 0,
  //      maskStyle: { position: 'fixed',top:'45px', left: '0', bottom: '50px', width: '100%', background:'#fff', zIndex: 1 }
  //     })
  //   }
  //   requestCount++
  // }

  // 隐藏loading
  // function hideLoading () {
  //   requestCount--
  //   if (requestCount === 0) {
  //     Toast.clear()
  //   }
  // }

  // 请求拦截
  instance.interceptors.request.use(config => {
    const token = getCookie('token')
    if (token) { // 如果有token,在头部加上这个消息
      config.headers.Authorization = 'Bearer' + token
    }
    // showLoading()
    return config
  }, err => {
    // hideLoading()
    console.log(err)
  })

  // 响应拦截
  instance.interceptors.response.use(res => {
    // hideLoading()
    return res
  }, err => {
    // hideLoading()
    if (err.code === 'ECONNABORTED' || err.code === "ERR_NETWORK") { // 请求超时
      if (window.location.pathname === '/login' || window.location.pathname === '/register') { // 登陆和注册页面请求超时 直接谈信息框
        Toast.show({ content: '网络超时,请重新登陆', duration: 1000 })
      } else { // 其他页面请求超时, 需要拿到错误信息, 根据错误信息将loading隐藏, 然后显示超时信息内容
        return Promise.reject(err)
      }
    } else {
      if(err.status === 401 && window.location.pathname === '/login') {  // 这里的401代表密码错误
        Toast.show({ content: '用户名或密码有误', duration: 1000 })
      } else if(err.status === 422) {  // 邮箱存在 第二次输入的密码不一致等等错误信息
        Toast.show({ content: err.response.data.errors[Object.keys(err.response.data.errors)[0]][0], duration: 1000 })
      } else { // 其他的错误 比如401 未登录
        return Promise.reject(err)
      }
    }
  })
  return instance(config)
}